home *** CD-ROM | disk | FTP | other *** search
- /* << ACE >>
-
- -- Amiga BASIC Compiler --
-
- ** Parser Variables **
- ** Copyright (C) 1998 David Benn
- **
- ** This program is free software; you can redistribute it and/or
- ** modify it under the terms of the GNU General Public License
- ** as published by the Free Software Foundation; either version 2
- ** of the License, or (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program; if not, write to the Free Software
- ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- Author: David J Benn
- Date: 19th October-30th November, 3rd-12th December 1991,
- 14th,27th January 1992, 5th,7th-17th,
- 23rd-24th February 1992,
- 14th,22nd March 1992,
- 21st April 1992,
- 2nd,11th,15th May 1992,
- 7th,8th,9th,11th,13th,14th,28th June 1992,
- 2nd-6th,8th,14th-19th,26th,28th,29th July 1992,
- 1st,9th August 1992,
- 6th,7th,22nd,28th December 1992,
- 28th February 1993,
- 6th,13th June 1993,
- 1st July 1993,
- 25th September 1993,
- 25th,26th October 1993,
- 2nd November 1993,
- 18th,25th December 1993,
- 2nd,5th January 1994,
- 12th June 1994,
- 19th,22nd August 1994,
- 11th March 1995
- */
-
- #include "acedef.h"
-
- /* externals */
- extern int sym;
- extern int lastsym;
- extern int obj;
- extern int typ;
- extern int errors;
- extern char id[MAXIDSIZE];
- extern char ut_id[MAXIDSIZE];
- extern SHORT shortval;
- extern LONG longval;
- extern float singleval;
- extern char stringval[MAXSTRLEN];
- extern SYM *curr_item;
- extern SYM *structdef_item;
- extern CODE *curr_code;
- extern STRUCM *curr_structmem;
- extern SHORT dimsize[255];
- extern BOOL end_of_source;
- extern FILE *dest;
- extern char ch;
-
- char string_const_start[7] = {'d', 'c', '.', 'b', ' ', '"', '\0'};
- char string_const_end[4] = {'"', ',', '0', '\0'};
-
- /* --parser-- */
- int table_mem[2] = {0};
- int addr[2];
- int lev;
-
- char exit_sub_name[80];
-
- ACELIBS acelib[NUMACELIBS], otherlib[NUMLIBS];
-
- char librarybase[MAXIDSIZE + 6];
- char libraryname[MAXIDSIZE + 20];
- char bmapname[MAXIDSIZE + 20];
- BOOL restore_a4 = FALSE;
- BOOL restore_a5 = FALSE;
- CODE *exit_for_cx = NULL;
-
- /* --expression type holders-- */
- int storetype, eqvtype, ortype, andtype, nottype, simptype;
- int modtype, idivtype, prodtype, negtype, exptype, factype;
-
- /* --miscellaneous parser variables-- */
- int fstrcount = 0; /* PRINT format string counter */
- long strconstcount = 0; /* string constant counter */
- long strstorecount = 0; /* string storage counter */
- long stringvarcount = 0; /* string variable counter */
- long tempstrcount = 0; /* temporary string store counter */
- long tempshortcount = 0; /* temporary short store counter */
- long templongcount = 0; /* temporary long store counter */
- int labelcount = 0; /* label counter */
- int arraycount = 0; /* array counter */
- long structcount = 0; /* structure counter */
-
- char strstorename[80], strstorelabel[80];
- char tempstrname[80], tempstrlabel[80];
- char tempshortname[80], tempshortlabel[80];
- char templongname[80], templonglabel[80];
-
- char numbuf[80]; /* temporary ffp/int # buffer */
- int exitvalue = 0; /* compiler exit value */
-
- BOOL mathffpused = FALSE; /* are these libs/devs used? */
- BOOL mathtransused = FALSE;
- BOOL dosused = FALSE;
- BOOL gfxused = FALSE;
- BOOL intuitionused = FALSE;
- BOOL translateused = FALSE;
- BOOL narratorused = FALSE;
-
- BOOL iffused = FALSE; /* create+delete ILBM.library? */
-
- BOOL basdatapresent = FALSE; /* DATA statement(s)? */
- BOOL readpresent = FALSE; /* READ statement(s)? */
-
- BOOL cli_args = FALSE; /* any CLI arguments? */
-
- /* event trapping */
- BOOL break_event = FALSE;
- BOOL menu_event = FALSE;
- BOOL mouse_event = FALSE;
- BOOL timer_event = FALSE;
- BOOL error_event = FALSE;
- BOOL wdw_event = FALSE;
- BOOL gad_event = FALSE;
-
- BOOL break_event_label_exists = FALSE;
- BOOL menu_event_label_exists = FALSE;
- BOOL mouse_event_label_exists = FALSE;
- BOOL timer_event_label_exists = FALSE;
- BOOL error_event_label_exists = FALSE;
- BOOL wdw_event_label_exists = FALSE;
- BOOL gad_event_label_exists = FALSE;
-
- char break_event_label[80];
- char menu_event_label[80];
- char mouse_event_label[80];
- char timer_event_label[80];
- char error_event_label[80];
- char wdw_event_label[80];
- char gad_event_label[80];
-
- int break_event_branch;
- int menu_event_branch;
- int mouse_event_branch;
- int timer_event_branch;
- int error_event_branch;
- int wdw_event_branch;
- int gad_event_branch;
-
- float timer_event_seconds;
- char ontimer_seconds[40];
- BOOL ontimerused = FALSE;
-
- /* compiler option flags */
- BOOL break_opt = FALSE; /* ctrl-c trapping */
-
- BOOL optimise_opt = FALSE; /* peephole optimisation */
-
- BOOL make_icon = FALSE; /* make icon for executable */
-
- BOOL error_log = FALSE; /* send all error messages to ace.err */
-
- BOOL asm_comments = FALSE; /*
- ** Make each ACE source line a comment
- ** in the assembly source file.
- */
-
- BOOL list_source = FALSE; /*
- ** List each line of source code as it is
- ** being compiled.
- */
-
- BOOL wdw_close_opt = FALSE; /* window close trapping */
-
- BOOL module_opt = FALSE; /*
- ** Determines whether A68K source file
- ** is a code module or a complete ACE program.
- */
-
- /* misc. flags */
- BOOL have_lparen = FALSE;
- BOOL have_equal = FALSE; /* see assign() & push_indices() */
-
- BOOL early_exit = FALSE; /* set to TRUE if ctrl-c break detected */
-